new FilteredImageSource(ImageProducer orig, ImageFilter imgf) :: 자주 쓰이는 메소드및 API 를 정리합니다.[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

자주 쓰이는 메소드및 API 를 정리합니다.
[1]
등록일:2008-03-17 10:24:17 (0%)
작성자:
제목:new FilteredImageSource(ImageProducer orig, ImageFilter imgf)
import  java.applet.Applet;
import  java.awt.Graphics;
import  java.awt.Image;
import  java.awt.MediaTracker;
import  java.awt.image.ColorModel;
import  java.awt.image.FilteredImageSource;
import  java.awt.image.ImageFilter;

public  class  MainClass  extends  Applet  {
    Image  i,  j;

    public  void  init()  {
        i  =  getImage(getDocumentBase(),  "rosey.jpg");
        MediaTracker  mt  =  new  MediaTracker(this);
        mt.addImage(i,  0);
        try  {
            mt.waitForAll();
        }  catch  (InterruptedException  e)  {
            e.printStackTrace();
        }
        System.out.println("Loaded");
        j  =  createImage(new  FilteredImageSource(i.getSource(),  new  BlurFilter()));
        System.out.println("Created");
    }

    public  void  paint(Graphics  g)  {
        g.drawImage(i,  10,  10,  this);  //  regular
        if  (j  !=  null)
            g.drawImage(j,  250,  10,  this);  //  average
    }
}

//  This  example  is  from  the  book  _Java  AWT  Reference_  by  John  Zukowski.
//  Written  by  John  Zukowski.  Copyright  (c)  1997  O'Reilly  &  Associates.
//  You  may  study,  use,  modify,  and  distribute  this  example  for  any  purpose.
//  This  example  is  provided  WITHOUT  WARRANTY  either  expressed  or
class  BlurFilter  extends  ImageFilter  {
    private  int  savedWidth,  savedHeight,  savedPixels[];

    private  static  ColorModel  defaultCM  =  ColorModel.getRGBdefault();

    public  void  setDimensions(int  width,  int  height)  {
        savedWidth  =  width;
        savedHeight  =  height;
        savedPixels  =  new  int[width  *  height];
        consumer.setDimensions(width,  height);
    }

    public  void  setColorModel(ColorModel  model)  {
        //  Change  color  model  to  model  you  are  generating
        consumer.setColorModel(defaultCM);
    }

    public  void  setHints(int  hintflags)  {
        //  Set  new  hints,  but  preserve  SINGLEFRAME  setting
        consumer
                .setHints(TOPDOWNLEFTRIGHT  |  COMPLETESCANLINES  |  SINGLEPASS  |  (hintflags  &  SINGLEFRAME));
    }

    private  void  setThePixels(int  x,  int  y,  int  width,  int  height,  ColorModel  cm,  Object  pixels,
            int  offset,  int  scansize)  {
        int  sourceOffset  =  offset;
        int  destinationOffset  =  y  *  savedWidth  +  x;
        boolean  bytearray  =  (pixels  instanceof  byte[]);
        for  (int  yy  =  0;  yy  <  height;  yy++)  {
            for  (int  xx  =  0;  xx  <  width;  xx++)
                if  (bytearray)
                    savedPixels[destinationOffset++]  =  cm.getRGB(((byte[])  pixels)[sourceOffset++]  &  0xff);
                else
                    savedPixels[destinationOffset++]  =  cm.getRGB(((int[])  pixels)[sourceOffset++]);
            sourceOffset  +=  (scansize  -  width);
            destinationOffset  +=  (savedWidth  -  width);
        }
    }

    public  void  setPixels(int  x,  int  y,  int  width,  int  height,  ColorModel  cm,  byte  pixels[],
            int  offset,  int  scansize)  {
        setThePixels(x,  y,  width,  height,  cm,  pixels,  offset,  scansize);
    }

    public  void  setPixels(int  x,  int  y,  int  width,  int  height,  ColorModel  cm,  int  pixels[],
            int  offset,  int  scansize)  {
        setThePixels(x,  y,  width,  height,  cm,  pixels,  offset,  scansize);
    }

    public  void  imageComplete(int  status)  {
        if  ((status  ==  IMAGEABORTED)  ||  (status  ==  IMAGEERROR))  {
            consumer.imageComplete(status);
            return;
        }  else  {
            int  pixels[]  =  new  int[savedWidth];
            int  position,  sumArray[],  sumIndex;
            sumArray  =  new  int[9];  //  maxsize  -  vs.  Vector  for  performance
            for  (int  yy  =  0;  yy  <  savedHeight;  yy++)  {
                position  =  0;
                int  start  =  yy  *  savedWidth;
                for  (int  xx  =  0;  xx  <  savedWidth;  xx++)  {
                    sumIndex  =  0;
                    sumArray[sumIndex++]  =  savedPixels[start  +  xx];
                    if  (yy  !=  (savedHeight  -  1))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  +  savedWidth];
                    if  (yy  !=  0)
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  -  savedWidth];
                    if  (xx  !=  (savedWidth  -  1))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  +  1];
                    if  (xx  !=  0)
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  -  1];
                    if  ((yy  !=  0)  &&  (xx  !=  0))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  -  savedWidth  -  1];
                    if  ((yy  !=  (savedHeight  -  1))  &&  (xx  !=  (savedWidth  -  1)))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  +  savedWidth  +  1];
                    if  ((yy  !=  0)  &&  (xx  !=  (savedWidth  -  1)))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  -  savedWidth  +  1];
                    if  ((yy  !=  (savedHeight  -  1))  &&  (xx  !=  0))
                        sumArray[sumIndex++]  =  savedPixels[start  +  xx  +  savedWidth  -  1];
                    pixels[position++]  =  avgPixels(sumArray,  sumIndex);
                }
                consumer.setPixels(0,  yy,  savedWidth,  1,  defaultCM,  pixels,  0,  savedWidth);
            }
            consumer.imageComplete(status);
        }
    }

    private  int  avgPixels(int  pixels[],  int  size)  {
        float  redSum  =  0,  greenSum  =  0,  blueSum  =  0,  alphaSum  =  0;
        for  (int  i  =  0;  i  <  size;  i++)
            try  {
                int  pixel  =  pixels[i];
                redSum  +=  defaultCM.getRed(pixel);
                greenSum  +=  defaultCM.getGreen(pixel);
                blueSum  +=  defaultCM.getBlue(pixel);
                alphaSum  +=  defaultCM.getAlpha(pixel);
            }  catch  (ArrayIndexOutOfBoundsException  e)  {
                System.out.println("Ooops");
            }
        int  redAvg  =  (int)  (redSum  /  size);
        int  greenAvg  =  (int)  (greenSum  /  size);
        int  blueAvg  =  (int)  (blueSum  /  size);
        int  alphaAvg  =  (int)  (alphaSum  /  size);
        return  ((0xff  <<  24)  |  (redAvg  <<  16)  |  (greenAvg  <<  8)  |  (blueAvg  <<  0));
    }
}
[본문링크] new FilteredImageSource(ImageProducer orig, ImageFilter imgf)
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2822
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.